home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 07 - 1991 / 07.10 Oct 91 / Jorg October / MainMenu.f < prev    next >
Encoding:
Text File  |  1991-08-27  |  3.8 KB  |  162 lines  |  [TEXT/MPS ]

  1. ! MainMenu.f 
  2. ! Created 8/27/91 9:37 by AppMaker 
  3.  
  4. !!MP inlines.f
  5. !!G JLtest.finc.f
  6.  
  7. !!D+
  8. !!R+
  9. !!OV+
  10. !!S MainMenu 
  11.  
  12. !----------
  13.     Subroutine InitTitles
  14.     Call InitFileM
  15.     Call InitEditM
  16.     End !InitTitles
  17.  
  18. !----------
  19.     Subroutine LoadMenus
  20.     include 'Mainmenu.inc'
  21.     AppleMenu.menuh    = GetMenu (AppleID)
  22.     Call AddResMenu (AppleMenu, %val('DRVR'))
  23.     FileMenu.menuh    = GetMenu (FileID)
  24.     EditMenu.menuh    = GetMenu (EditID)
  25.     Call InsertMenu (AppleMenu, INT2(0))
  26.     Call InsertMenu (FileMenu, INT2(0))
  27.     Call InsertMenu (EditMenu, INT2(0))
  28.         Call DrawMenuBar
  29.     End !LoadMenus
  30.  
  31. !----------
  32.     Subroutine DoDeskAcc (itemNr)
  33.     integer*2 itemNr,refNum
  34.     String*255 name
  35.     include 'Mainmenu.inc'
  36.     Call GetItem (AppleMenu, itemNr, name)
  37.     refNum = OpenDeskAcc (name)
  38.     End !DoDeskAcc
  39.  
  40. !----------
  41.     Subroutine DoAbout 
  42.     integer*2 itemNr
  43.         itemNr = Alert (AboutID, nil)
  44.     End !DoAbout 
  45. !----------
  46.     Subroutine DoApple (itemNr)
  47.     integer*2 itemNr
  48.     Select case (itemNr)
  49.     case(AppleAbout)
  50.         Call DoAbout 
  51.     
  52.         case default
  53.         Call DoDeskAcc (itemNr)
  54.     end select
  55.     End !DoApple
  56. !----------
  57.     Subroutine DoMenus (menuChoice)
  58.     integer*2 menuID, itemNr
  59.     integer*4 menuChoice,M1,M2,PortTemp
  60.     PortTemp = 32767
  61.     M1 = JIAND(MENUCHOICE,PortTemp)    !extract the menu & item numbers
  62.     M2 = JISHFT(MENUCHOICE,-16)
  63.     menuID = M2
  64.     itemNr = M1
  65.  
  66.     if (menuID = AppleID) Call DoApple (itemNr)
  67.     if (menuID = FileID) Call DoFile (itemNr)
  68.     if (menuID = EditID) Call DoEdit (itemNr)
  69.     
  70.     Call HiliteMenu (INT2(0))
  71.     End !DoMenus
  72.  
  73. !----------
  74.     Subroutine UpdateMenus
  75.     include 'Globals.inc'
  76.     pointer /WindowRecord/    frontPeek
  77.     logical    isFront                !is there a front window?
  78.     logical    isCur                !is there a current window?
  79.     logical    isDirty                !is it dirty?
  80.     logical    hasFile                !does it have a file?
  81.     logical    isSelected            !is anything selected?
  82.     logical    isDesk                !is the front window a desk acc?
  83.     logical    isText                !is there a current text field?
  84.     logical    isScrap                !is there any scrap?
  85.     record /MenuHandle/    menu            
  86.     logical    menuBarChanged
  87.     logical EnableTitle
  88.     external EnableTitle
  89.     
  90.     menuBarChanged = .false.
  91.     isFront        = (FrontWindow <> nil)
  92.     isCur        = (curWindow <> nil)
  93.     isDirty     = .false.
  94.     hasFile     = .false.
  95.     isSelected    = .false.
  96.     if (isCur = .true.) then 
  97.         isDirty        =  cur^.dirty
  98.         hasFile        = (cur^.fileNum <> 0)
  99.     end if
  100.  
  101.     isDesk = .false.
  102.     if (isFront = .true.) then 
  103.         frontPeek    = FrontWindow()
  104.         isDesk        = (frontPeek^.windowKind < 0)
  105.     end if
  106.     isText        = .false.
  107.     if (isCur = .true.) then 
  108.         isText        = (cur^.text.TEH <> nil)
  109.     end if
  110.     isScrap        = .false.
  111.     if (isText = .true.) then 
  112.         isSelected    = (cur^.text.TEH^.TEP^.selStart <> cur^.text.TEH^.TEP^.selEnd)
  113.         isScrap        = (TEGetScrapLen > 0)
  114.     end if
  115.     
  116.     menu.menuH = FileMenu.menuH
  117.     Call Enable (menu, FileClose, isFront)
  118.     Call Enable (menu, FileSave, isDirty)
  119.     Call Enable (menu, FileSaveAs, hasFile)
  120.     Call Enable (menu, FileRevert, isDirty .and. hasFile)
  121.     menu.menuH = EditMenu.menuH
  122.     if (isFront = .true.) then 
  123.         Call Enable (menu, EditUndo,isDesk)
  124.         Call Enable (menu, EditCut,isDesk .or. isSelected)
  125.         Call Enable (menu, EditCopy,isDesk .or. isSelected)
  126.         Call Enable (menu, EditPaste,isDesk .or. isScrap)
  127.         Call Enable (menu, EditClear,isDesk .or. isSelected)
  128.         Call Enable (menu, EditSelectAll,isText)
  129.         end if
  130.     If (EnableTitle (EditMenu, isFront)) menuBarChanged = .true.
  131.      
  132.     if (menuBarChanged) Call DrawMenuBar
  133.  
  134.     End !UpdateMenus
  135.  
  136.     !----------
  137.     Subroutine Enable (menu, itemNr, enabled)
  138.     integer*2 itemNr
  139.     Integer*4 menu
  140.     logical enabled    
  141.         if (enabled) then 
  142.             Call EnableItem  (menu, itemNr)
  143.         else 
  144.             Call DisableItem (menu, itemNr)
  145.         end if
  146.     End !Enable
  147.     
  148.     !----------
  149.     Logical Function EnableTitle (menu, enabled)
  150.     record /MenuHandle/ menu
  151.     Integer*4 enabled
  152.     
  153.         EnableTitle = .false.    
  154.         if (Abs(enabled) <> (IIAnd(menu.menuH^.menuP^.enableFlags, INT2(1)))) EnableTitle = .true.
  155.         if (enabled) then 
  156.             Call EnableItem  (menu, INT2(0))
  157.         else 
  158.             Call DisableItem (menu, INT2(0))
  159.         end if
  160.     End !EnableTitle
  161.     
  162.